import { message } from 'antd'
import { USER_LOGIN_SUCCESS, USER_RESET, USER_ROLES } from './contants'
import { loginAsync, getUserPermission } from '../api/user'

/**
 * 定义用户登录成功是生成 action 的创建函数
 * @param {*} user
 * @returns
 */
export const loginSuccessActionCreator = user => ({
  type: USER_LOGIN_SUCCESS,
  payload: user,
})

export const userResetActionCreator = () => ({
  type: USER_RESET,
})

/**
 * 定义异步 Action 创建函数，在 action creator 中也可以返回一个函数
 * 该返回的函数会自动被 redux-thunk 中间件调用执行。在 thunk 中间件
 * 调用返回函数执行时，会传递 dispatch 参数
 */
export const loginAsyncActionCreator = user => dispatch => {
  loginAsync(user)
    .then(resData => {
      if (resData.status === 200) { // 登录成功，保存用户状态
        dispatch(loginSuccessActionCreator(resData.data))
      } else { // 用户名或密码错误，重置用户状
        dispatch({
          type: USER_RESET,
        })
        message.error(resData.message)
      }
    })
}

export const getPermissionCreator = () => dispatch => {
  getUserPermission()
    .then(data => {
      console.log('用户的角色及权限：', data)
      dispatch({
        type: USER_ROLES,
        payload: {
          roles: data.roles[0],
        },
      })
    })
}
